This application deals generally with the field of data transfer, and more specifically with optimal data transfer between devices.
Recent years have observed an increasing demand for portable devices such as cell phones, personal digital assistants, media players, and the like. Most of these portable devices include one or more memory media such as internal memory, memory sticks, and the like. In order to remain compatible with each other, most of these devices come pre-formatted with the FAT32 file system. The portable devices having such memory media exhibit a slow data transfer rate when receiving data from a host computer. Slow data transfer may be acceptable for conventional procedures such as data backup, or data archiving, but is detrimental when a significant amount of data needs to be synchronized with the host computer. For example, transferring 1 GB of data from a personal computer to an mp3 player may take about 2 minutes with a data transfer rate of 8 mbps (megabytes per second). Further, this problem increases when using high-capacity storage media or synchronizing large amount of data.
Available solutions like Direct Memory Access (DMA) speed up the data transfer but only when used to transfer data to a “Sparse File,” a special file that does not require initializing. Unfortunately, this requirement renders DMA ineffective on FAT32, because FAT32 does not support direct sparse file creation. In FAT32, indirect sparse file creation involves writing zeros to the pre-allocated memory blocks, which imposes a major overhead before any data is transferred.
While there have been recent developments in optimizing memory pre-allocation techniques for the portable devices, there is a need in the art where the file system limitations are overcome by co-operation between the kernel/file system and the portable devices.
As FAT32 is the file system on most of the portable devices, it would be highly desirable to have a simple and effective mechanism for enabling fast data transfer using DMA techniques in the FAT32 file system.